import { DurationDto } from '../../common/model/commonModel';

// 查询所有租户 请求参数定义
export type QueryTopoTenants = {
  duration: DurationDto;
};

// 查询所有租户 响应定义
export type TopoTenant = {
  tenantName: string;
  tenantCode: string;
};

// 查询指定租户的所有应用 请求参数定义
export type QueryTopoAppsByTenant = {
  tenantCodes: string[];
};

// 查询指定租户的所有应用 响应定义
export type TopoAppByTenant = {
  appId: string;
  appName: string;
};

// 查询 指定租户 & 指定应用的所有服务 请求参数定义
export type QueryServicesByApp = {
  tenantCodes: string[];
  appIds: string[];
};

// 查询 指定租户 & 指定应用的所有服务 响应定义
export type TopoServiceByApp = {
  key: string;
  label: string;
};

// 获取服务拓扑 请求参数定义
export type QueryServiceTopo = {
  duration: DurationDto;
  serviceCodes: string[];
};

// 拓扑中的节点 定义
export type Node = {
  id: string;
  name: string;
  type: string;
  isReal: boolean;
};

// 拓扑中的调用关系（边） 定义
export type Call = {
  source: string;
  sourceComponents: string[];
  target: string;
  targetComponents: string[];
  id: string;
  detectPoints: string[];
};

// 获取整个应用集群或服务的拓扑概述 响应定义
export interface TopologyResp {
  nodes: Node[];
  calls: Call[];
}

// 获取拓扑详细信息 请求参数
export type QueryTopoInfo = {
  duration: DurationDto;
  ids: string[];
  idsS: string[];
  idsC: string[];
};

// key-value 类型定义
export type KVInt = {
  id: string;
  value: string;
};

// 获取拓扑详细信息 响应定义
export interface TopoInfo {
  sla: KVInt[];
  nodeCpm: KVInt[];
  nodeLatency: KVInt[];
  cpmS: KVInt[];
  latencyS: KVInt[];
  cpmC: KVInt[];
  latencyC: KVInt[];
}

// 获取拓扑真实节点服务详情 请求参数
export type QueryTopoServiceDetail = {
  duration: DurationDto;
  serviceId: string;
};

// 获取拓扑真实节点服务详情 响应定义
export interface TopoServiceDetail {
  times: string[];
  servicePercentile: any;
  serviceSLA: string[];
  serviceThroughput: string[];
  serviceResponseTime: string[];
  serviceApdexScore: string[];
}

// 获取拓扑分布式调用（边）详情 请求参数
export type QueryTopoCallInfo = {
  duration: DurationDto;
  id: string;
  detectPoint: string;
};

// 获取拓扑分布式调用（边）详情 响应定义
export interface TopoCallInfo {
  times: string[];
  percentile: any;
  sla: string[];
  throughput: string[];
  responseTime: string[];
}
